public void testRemoveLocalVariable() throws Exception {
final MethodGen mg = getMethod(Foo.class, "bar");
final LocalVariableGen lv = mg.getLocalVariables()[1];
assertEquals("variable name", "a", lv.getName());
final InstructionHandle start = lv.getStart();
final InstructionHandle end = lv.getEnd();
assertNotNull("scope start", start);
assertNotNull("scope end", end);
assertTrue("scope start not targeted by the local variable", Arrays.asList(start.getTargeters()).contains(lv));
assertTrue("scope end not targeted by the local variable", Arrays.asList(end.getTargeters()).contains(lv));
mg.removeLocalVariable(lv);
assertFalse("scope start still targeted by the removed variable", Arrays.asList(start.getTargeters()).contains(lv));
assertFalse("scope end still targeted by the removed variable", Arrays.asList(end.getTargeters()).contains(lv));
assertNull("scope start", lv.getStart());
assertNull("scope end", lv.getEnd());
}
|
private void compare(final String name, final Method m) {
final Code c = m.getCode();
if (c == null) {
return; // e.g. abstract method
}
final byte[] src = c.getCode();
final InstructionList il = new InstructionList(src);
final byte[] out = il.getByteCode();
if (src.length == out.length) {
assertArrayEquals(name + ": " + m.toString(), src, out);
} else {
System.out.println(name + ": " + m.toString() + " " + src.length + " " + out.length);
System.out.println(bytesToHex(src));
System.out.println(bytesToHex(out));
for (final InstructionHandle ih : il) {
System.out.println(ih.toString(false));
}
fail("Array comparison failure");
}
}
|